{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第四次作业：对用户进行聚类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "作业要求： 根据用户的属性进行聚类（KMeans聚类） 尝试K=20， 40， 80，并计算各自CH_scores。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 一、收集数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据来源于 Kaggle 竞赛：Event Recommendation Engine Challenge"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 二、 数据准备"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1、数据基本信息"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "事件描述信息在users.csv文件：共7维特征 \n",
    "user_id \n",
    "locale：地区，语言 \n",
    "birthyear：出身年 \n",
    "gender：性别 \n",
    "joinedAt：用户加入APP的时间，\n",
    "ISO-8601 UTC time location：地点 \n",
    "timezone：时区"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "##导入工具包\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "color = sns.color_palette() # 调色板\n",
    "%matplotlib inline\n",
    "pd.options.mode.chained_assignment = None # default = 'warn'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>locale</th>\n",
       "      <th>birthyear</th>\n",
       "      <th>gender</th>\n",
       "      <th>joinedAt</th>\n",
       "      <th>location</th>\n",
       "      <th>timezone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3197468391</td>\n",
       "      <td>id_ID</td>\n",
       "      <td>1993</td>\n",
       "      <td>male</td>\n",
       "      <td>2012-10-02T06:40:55.524Z</td>\n",
       "      <td>Medan  Indonesia</td>\n",
       "      <td>480.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3537982273</td>\n",
       "      <td>id_ID</td>\n",
       "      <td>1992</td>\n",
       "      <td>male</td>\n",
       "      <td>2012-09-29T18:03:12.111Z</td>\n",
       "      <td>Medan  Indonesia</td>\n",
       "      <td>420.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>823183725</td>\n",
       "      <td>en_US</td>\n",
       "      <td>1975</td>\n",
       "      <td>male</td>\n",
       "      <td>2012-10-06T03:14:07.149Z</td>\n",
       "      <td>Stratford  Ontario</td>\n",
       "      <td>-240.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1872223848</td>\n",
       "      <td>en_US</td>\n",
       "      <td>1991</td>\n",
       "      <td>female</td>\n",
       "      <td>2012-11-04T08:59:43.783Z</td>\n",
       "      <td>Tehran  Iran</td>\n",
       "      <td>210.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3429017717</td>\n",
       "      <td>id_ID</td>\n",
       "      <td>1995</td>\n",
       "      <td>female</td>\n",
       "      <td>2012-09-10T16:06:53.132Z</td>\n",
       "      <td>NaN</td>\n",
       "      <td>420.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      user_id locale birthyear  gender                  joinedAt  \\\n",
       "0  3197468391  id_ID      1993    male  2012-10-02T06:40:55.524Z   \n",
       "1  3537982273  id_ID      1992    male  2012-09-29T18:03:12.111Z   \n",
       "2   823183725  en_US      1975    male  2012-10-06T03:14:07.149Z   \n",
       "3  1872223848  en_US      1991  female  2012-11-04T08:59:43.783Z   \n",
       "4  3429017717  id_ID      1995  female  2012-09-10T16:06:53.132Z   \n",
       "\n",
       "             location  timezone  \n",
       "0    Medan  Indonesia     480.0  \n",
       "1    Medan  Indonesia     420.0  \n",
       "2  Stratford  Ontario    -240.0  \n",
       "3        Tehran  Iran     210.0  \n",
       "4                 NaN     420.0  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv(\"users.csv\")\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "38209"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_records = df.shape[0]\n",
    "n_records"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#并统计有多少不同的users（n_users）\n",
    "def get_uniqueUsers():\n",
    "    uniqueUsers = set()\n",
    "    \n",
    "    for i in range(n_records):\n",
    "        uniqueUsers.add(df.loc[i,'user_id'])\n",
    "    \n",
    "    n_events = len(uniqueUsers)\n",
    "    return n_events\n",
    "\n",
    "n_users = get_uniqueUsers()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "38209"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_users"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 38209 entries, 0 to 38208\n",
      "Data columns (total 7 columns):\n",
      "user_id      38209 non-null int64\n",
      "locale       38209 non-null object\n",
      "birthyear    38209 non-null object\n",
      "gender       38100 non-null object\n",
      "joinedAt     38152 non-null object\n",
      "location     32745 non-null object\n",
      "timezone     37773 non-null float64\n",
      "dtypes: float64(1), int64(1), object(5)\n",
      "memory usage: 2.0+ MB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>timezone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>3.820900e+04</td>\n",
       "      <td>37773.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>2.150982e+09</td>\n",
       "      <td>110.161226</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.242134e+09</td>\n",
       "      <td>359.604823</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>6.110000e+03</td>\n",
       "      <td>-720.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.072041e+09</td>\n",
       "      <td>-240.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>2.153423e+09</td>\n",
       "      <td>240.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>3.222394e+09</td>\n",
       "      <td>420.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>4.294808e+09</td>\n",
       "      <td>840.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            user_id      timezone\n",
       "count  3.820900e+04  37773.000000\n",
       "mean   2.150982e+09    110.161226\n",
       "std    1.242134e+09    359.604823\n",
       "min    6.110000e+03   -720.000000\n",
       "25%    1.072041e+09   -240.000000\n",
       "50%    2.153423e+09    240.000000\n",
       "75%    3.222394e+09    420.000000\n",
       "max    4.294808e+09    840.000000"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2、可视化数据特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nZbl16WVd+kj0shm9LKeX5dall3XpI9HLZvSynF6WW5de1qWPRC+b0ctyelluXXpZlz4SvWxGL8vp\nZbl16WVd+kj0shm9LKeX5dall3XpI9n5Xh61UzvaAe9JcnHbi9qeneSqJLeuuCcAAAAAAAAAADjt\nzpgzAY0xHmz7g0luT3JWkv1pZPaNAAAgAElEQVRjjLtX3BYAAAAAAAAAAJx2Z0wIKEnGGLcluW2H\nd3vKflrsFNDLcnpZbl16WZc+Er1sRi/L6WW5dellXfpI9LIZvSynl+XWpZd16SPRy2b0spxelluX\nXtalj0Qvm9HLcnpZbl16WZc+Er1sRi/L6WW5dellXfpI9LIZvSynl+XWpZd16SPRy2b0spxelluX\nXtalj2SHe+kYYyf3BwAAAAAAAAAAnGKPWnUDAAAAAAAAAADAyRECAgAAAAAAAACAmRMCOkXavrbt\ns4+q/fF0/ai2r2p7V9sPtn1P24u2uN3/e6v7O2r529runaY/Pu33g20/1PblbR+99aM7ccfqs+2P\ntP3Ttl+3Q718f9sPtL277fvb/lLbc6Zlb2v70bZ3tv1w22tPcy+vbfuxaX93Hrmd235929+Y+vtQ\n29u2ud0fmvr/lW2s811tf2Oa/m/aHp56+kjbH9nekZ2ctrvb/lnbf3JU/ch9+ANtf7vtXz7GNva0\nvesk+3job7JQe+i+PPVz3rHGb7LdLd8+0zY/t3Af+Y9T/Sfa/v5U+1Db523/CB+xrx9u+5jjjDly\nG9w5XV+5sOxLU/2utr9+5HF1jG2ditvo4umx8ntt39v2rW2/c1q2eD8+cnnSNrb9x9vs5fnTsd89\n3SY/OtVfO91Wj57mz2v78e1se5t9bHrfWHxNmOa3fRts9np0nHWOvA7uafsnC73967bbfg8yHeOP\nnsA6R/4u97R90+L94ajn/zvb3ryFbZ7T9p9ucf+PW9j2Hyz0cmfbs7f7+FnY7kk9jo5+3urGe4Pb\n2z564W/y/m68Z/nrJ7D9I69re9r+o6300vYFC3+bLy485/zU9o/wYdv/ps1u17Zf3fb/7VHvRdr+\nWtt/OD2ffLntty8su6vtnm3sf1uvzW0vafv26Tb4SDferzxmYfktbd+x1f0v2f6WnuPa/vjC7fGl\nhel/Of3NOo37221H2wum+a9re/8JPsa383r0/ra/2fYb2r5r6u0Tffjz/55jbOehx/HRj4fj7P/f\nT9s+2Ie/Tn9Ht/lce7KP4yXbW3yv8ti275seV4/YT0/g+XRa72HHuGT5I26fhfp5m623xX1v63Wo\ny9/jvq8brwW3t/2Ok+lnm70sfVy3/bd9+PuVj7f9w9Pcy9X98/fVd3V6T9dNPp+c4D6OeXt34zPP\nr7a9txvv497R9vumZUfeA79v+lv97An2sOX3c8seD4vHsLitts+c7kNPOJG+ttHTI57rT/Rxe4L7\n3/TzV9sLpv7u6cZ78Z9ve/YO9bX4vu6utt+7UN+Rv820vz3deO172ULtvG58lv2FtpdN9+sjr5Vn\nHXmtOGobJ/uZaPFzz91tb+7D3zNs+h3IJsd0Qv1s4TF0Qu93N9nXQ691myx/W9sDC/N7275tmt7y\n6/1R2zwVt9VDf6PjHcM2t7vl19duvLe7e7pP3Nn2qVP9odf26VjvaXv5qehvSQ+LrzXvb3vpwrLv\nmZ77j3wf9k+Ota1T3NfRt89JfY4/keekbu1z607dTovPLQ99p9KT+H77qO0f+Xz0QNuXHGPc4t/k\noc+FPc770W30seXt9DifC7vxGeh13Xhd/L1petPvu0/ha8AvTNM/0fbzbR+/sHxb320t2f6W78fT\n4+bzbb9mofbz3Xit3NL7qZP9mxx1f/lI29d04TNp211tP9P2fzrRfWyzn9H2l4/a/+E+/PPJSX3X\nsIUeHvF600d+T/e+6fH47rb7trjdh77j2MZ95BG3bze+GzzyPeGR7wzv7PS54HTqkv9BtH3qUc97\nd3bjf1c/cJxtnex9d9PvM7qN/4kcZx/PmW6zt26y/BVHHffvduP9219aGLPt76JO5Hmoy/8v8/Iu\nvO+eanvbfuAEtr/4GNjS95VH1W7t/9/emcfbUVR5/PsDFBh2UFRkiYQRZV9EkVXABQRERjFEZBvF\nQXEhCiKSYRBBEISM7LtBZBdwWATZBUJYBMIua8IiCIKgrALhzB+nOq9fv+6+3ffel7zMnO/nk0/e\nXbr63KquqnNOnTpV7hP6WFtZUnlt5qKXC69nzAO59+6UdGaL++d9Y7XPsgbb6vdL+q/c+5VraTML\nDfaJVdoEw3jvynlQ0lJyHXjR9Nki6XVXfbqhTN+Tz4eZj+5wSe9In2Vjy5C1vmGQI3+vKZKOSO9L\n0ni5PvCgfH1vxR7u86MG38n7t6co6aHqYn2oUG5p35G0v6RP1lyX1++nSTov99kXJU1sI0cZEQQ0\n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\nJLAQsCywIbADsHMqextgv/TegsDngOdTMM7FwGPAKOD9wFkda2yA7fFjyhZIZZS9dyrwFrAcsDrw\naeBruTI+BjyA1/chwMmSlD47DfgXYEVgcWBC+j2VdS1peeBbwFpmtgDeVtNa/KYgCIIgCIIgCIIg\nCIKuiSCgIAiCIAiCIAiCIAiC3jjCzJ4ys78BFwGrtbj2AjO7zcxeBy4AXjezX5nZdOBsPHAlz1Fm\n9kS614F4YA/ALsDxZnazmU03s1PxoKK1C3I+YWavlcixOfCQmZ1mZm+Z2ZnAn4AtO/2AFMwzBtjb\nzF4ys2nAYXhADnjQzSFmdqs5D5vZY8BHgSWAPc3sFTN73cxuKLtHBRPN7N4k75vF94BFgc2A3VP5\nz+KBPNvmynjMzE5M9X0q8D7gPZLel67d1cxeMLM3zewP6Zq6up4OzA2sIOkdZjbNzB5p8ZuCIAiC\nIAiCIAiCIAi6JoKAgiAIgiAIgiAIgiAIeuMvub9fBeZvce0zub9fK3ldLOuJ3N+P4UE0AMsA30/H\nU70o6UVgqdznxWuLLMFANp18+e+vFx/wLDrvLFyfv3YpoCwQZik8COetks+aUPZ78u8tA7wDeDpX\nJ8fjWX0yZrSdmb2a/pw/yfY3M3uh5B6VdW1mDwO745mPnpV0lqQlSsoIgiAIgiAIgiAIgiDoOxEE\nFARBEARBEARBEARBMDy8gh8nBYCk9/ahzKVyfy8NPJX+fgI40MwWzv37l5TRJ8Nqyn0KD27JszTw\n5wYyPQe8Wbg+f+0T+PFlRZ4AlpY0V8lng+oOKKu7st+Tf+8JPEPPu3J1sqCZrVj+M4bItqikhSs+\nq6xrMzvDzNbD68OAnzW4XxAEQRAEQRAEQRAEQc9EEFAQBEEQBEEQBEEQBMHwcCewoqTVJM2DZ4fp\nld0kLSlpUeBH+JFhACcCu0r6mJz5JG0uaYGG5f4O+KCkL0uaS9IYYAXg4k4XpqO0zgEOlLSApGWA\n7wG/Tl85CdhD0ppJtuXSd24BngYOTvLOI2nddM0UYANJS0taCNi74e/Iy/U0cDlwmKQFJc0habSk\nDRteeylwjKRFJL1D0gbp48q6lrS8pI0lzQ28jmdzmt5W9iAIgiAIgiAIgiAIgm6IIKAgCIIgCIIg\nCIIgCIJhwMweBPYHrgQeAm7oQ7Fn4IEtj6Z/B6R7/RHYBTgKeAF4GNiphazPA1sA3weeB34AbGFm\nzzUs4tt49p5H8d95BnBKKvtc4MD03kvAb4FFU/DQlsBywOPAk8CYdM0VeIDTXcBtNAhGqmAH/Kiy\n+/B6+Q3wvobXbo9nOPoT8Cx+zFenup4bOBjPjvQX/OixH3UpexAEQRAEQRAEQRAEQStkVpcJOgiC\nIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiCkU5kAgqCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC2ZwI\nAgqCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC2ZwIAgqCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC\n2ZwIAgqCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC2ZwIAgqCIAiCIAiCIAiCIAiCIAiCIAiCIAiC\nIAiC2ZwIAgqCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC2ZwIAgqCIAiCIAiCIAiCIAiCIAiCIAiC\nIAiCIAiC2ZwIAgqCIAiCIAiCIAiCIAiCIAiCIAiCIAiCIAiC2ZwIAgqCIAiCIAiCIAiCIAiCIAiC\nIAiCIAiCIAiC2Zz/Bb9zy/pQo++yAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bebe60fe10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#LocaleId\n",
    "cnt_srs = df['locale'].value_counts()\n",
    "plt.figure(figsize=(40,5))\n",
    "sns.barplot(cnt_srs.index,cnt_srs.values,alpha=0.8,color=color[2])\n",
    "plt.xlabel(\"number of occurrences\",fontsize = 12)\n",
    "plt.ylabel(\"locale\",fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有图可见，地区最多的是en_US"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nn0les0y9k1wzh9EAAAAAAAAAAAAAgGdoy0YPAAAAAAAAAAAAAACcWTb0JGUAADanxYOLM9t7sncy\ns70BAAAAAAAAAJgPJykDAAAAAAAAAPB/27vzsEmq+tDj3x8MS9gFlCACA66PJgZcQBMX4r6bzQvG\naAhR4r1ZNInREE0uRjGGGxOvERcMAAAgAElEQVQ1xC2KuMSIGjWucSF3krhEAQXCqmhGQTBE1AQ0\n5Cqe+8c5L9T0dFVXV9d5e6bn+3meeebtqq761a/q1KlTp09XS5IkSaNykLIkSZIkSZIkSZIkSZIk\nSZKkUW1Y9gZIkiRJfZx09klV1nvm8WdWWa8kSZIkSZIkSZIkSdKOzCcpS5IkSZIkSZIkSZIkSZIk\nSRqVg5QlSZIkSZIkSZIkSZIkSZIkjcpBypIkSZIkSZIkSZIkSZIkSZJG5SBlSZIkSZIkSZIkSZIk\nSZIkSaNykLIkSZIkSZIkSZIkSZIkSZKkUTlIWZIkSZIkSZIkSZIkSZIkSdKoHKQsSZIkSZIkSZIk\nSZIkSZIkaVQOUpYkSZIkSZIkSZIkSZIkSZI0KgcpS5IkSZIkSZIkSZIkSZIkSRqVg5QlSZIkSZIk\nSZIkSZIkSZIkjcpBypIkSZIkSZIkSZIkSZIkSZJGtWHZGyBJkiRti046+6Rq6z7z+DOrrVuSJEmS\nJEmSJEmSJGlb4CBlSZIkaRtRa2C0g6IlSZIkSZIkSZIkSdJ6c5CyJEmStIPyadGSJEmSJEmSJEmS\nJKmWnZa9AZIkSZIkSZIkSZIkSZIkSZJWi09SliRJkrRuaj29ue3JzT4tWpIkSZIkSZIkSZKk5XCQ\nsiRJkiSNZBmDotc75o6QoyRJkiRJkiRJkiRpcQ5SliRJkiSpwYHYkiRJkiRJkiRJkrQ4BylLkiRJ\nkrSD2REGYjvwW5IkSZIkSZIkSVqu7XKQckQ8CngFsDPw+pTSS5e8SZIkSZIkaQdXa2D0tjLwW5Ik\nSZIkSZIkSZrHdjdIOSJ2Bv4CeDhwNXBuRLwvpXTpcrdMkiRJkiRpte0IA7FXPcdV2qdtMR3AL0mS\nJEmSJEnStmG7G6QMHANcmVL6MkBEvB14IuAgZUmSJEmSJEnrbkcYiO3gb0mSJEmSJEnSvLbHQcqH\nAFc1Xl8NHLukbZEkSZIkSZIkjWxHGIi9SjluK/u0ZkxzrGNHzXGV9mlbzB0hR0mSJEmSNFuklJa9\n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\nnv9V2qod+7Ra27GtDcCAfsc+8XouM1o7riO/5jJz9x0Piblof9WQHIsa7fGpbQAq9QFG7nP7IHBK\nSumTa++vWY/32K+DDCg3C/Udd8Usx2lD+ftw4K7A5or91W3lZs26ldWKOba9v1p/VUdZrXU+Ti03\nE8usS71azvsa/dVT1eznrGXAcaxSbjqO4UKfq8zIceq1g3rt8an7dEk51uoDaHt/zX7OWcbuA2g7\njjU/W+1apsYYmanlpvJxbGsDVLnn6Gg71rw/bqtX1/W+qtZnOV3X/0UNqeMqxZuV4xb1TVs7JCKa\nv0D+BMp5lFJ6ZErpqLTlAGXIT4P9I7auy/YlP934exHxk8DhjXnvIQ92vS+5H3GhHGuOrehxHPvU\n4++lPNk98qDSXYFvpJR+qezT5gBlUkpfBZ4PvGpiPfsC30p5gPLdyGMSepu3jlu0DTDgWrVQ23hI\njhPLjDkur6uNU6tPvu04Lrxfb5FS2mH+kQvCtcD3yCPAfxl4FvCF8u+lQJT3bgSuIF8gPw4cXqYf\nRL5BuQi4BPhz8rcaasa8A5DK9AvKv6fXijexvo3AxbX3a5l3H3Jj9kvAGWvLVIx3eln+B+X/Uyse\nwz3J39peKzevAHYeaZ/uRf628iXkzoDfaaznn8q0C4GHrsMxPJz8jcmLyE84Omwdcnwh+UJ2MfAW\nYLeWeDc2/j6I/G3vUxs5/f3kdgNnAT/Xso5nAf9S/n0auGPN85H8IdDdRjwXu/bpHuRvxO87cr3a\nFfMo8rfwLiI3sm5TKx5wJPmcuLDMe/465fiY8v4vdcUcK15jfccBH6idI3BP8s+pXEQ+H/9gHeqc\nZ5bpF5E7Rw+onOMDyNfji7j1evyYyuVmq/UsGq9RLv65ZT2Xln8njFVuZsTsdRzHite3Th05x17X\nxzHiUbfNsZH287FX2Rlxn/Zqx41ddhr7obV9PNJx7N3+H3m/jt4e78ix2n1Vef8vlPVeDJy+DnXO\n1HiV65y2HGudj1vFY446Z8T8qtxzTCx3KvCc8nfvtuOY5aZPfTPicex9Po54HHvVNyPmWKVfpbz/\n+SWPK4BHz1tu5o0J/GxZ54XkJ2I8ft46Z6x41G07tpWd0ftyyvs3A98kP838auDuNcvqjP06ettx\nRrxl5Dj69bgrXq16tS0mla6PM/ZpjX7OtvyqtVU7YlZtOzaWO5XSBiiv+/Y7jlXnVGnHdeTXq+94\n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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bebea926d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# BirthYearInt\n",
    "cnt_srs = df['birthyear'].value_counts()\n",
    "plt.figure(figsize=(50,5))\n",
    "sns.barplot(cnt_srs.index,cnt_srs.values,alpha=0.8,color=color[2])\n",
    "plt.xlabel(\"number of occurrences\",fontsize = 12)\n",
    "plt.ylabel(\"birthyear\",fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有图可知，出生于1993，1992，1994位于前三位"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWAAAAFDCAYAAAAEWdTUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFwVJREFUeJzt3Xu4XXV95/H3h4uoeAEKokIwKqkO\n2ooSgfFStfogOM6AzwyjaCUIbZSiUx916qXTYrm0th3HqY9VizUCjyJoawUtihnUWh0vhBa5iJoI\naCIUggFKpeP1O3+sX3R72Cc5Oznn/JJz3q/n2c9e67du37X3zues/Pbaa6WqkCTNv116FyBJi5UB\nLEmdGMCS1IkBLEmdGMCS1IkBLEmdGMCS1IkBLEmdGMCS1MluvQvoad99962lS5f2LkPSAnPllVfe\nXlX7bW2+RR3AS5cuZc2aNb3LkLTAJPn2TOazC0KSOjGAJakTA1iSOjGAJakTA1iSOjGAJakTA1iS\nOjGAJakTA1iSOjGAJakTA1iSOlnU14LYVidfdHLvErSNVr1wVe8SpJ/xCFiSOjGAJakTA1iSOjGA\nJakTA1iSOjGAJakTA1iSOjGAJakTA1iSOjGAJakTA1iSOjGAJakTA1iSOjGAJakTA1iSOjGAJakT\nA1iSOjGAJakTA1iSOjGAJakTA1iSOjGAJakTA1iSOjGAJakTA1iSOjGAJakTA1iSOjGAJakTA1iS\nOjGAJakTA1iSOjGAJamTeQngJEuSfCbJ9UmuS/I7rX2fJKuTrG3Pe7f2JHl7knVJrk7ypJF1rWjz\nr02yYqT9sCTXtGXeniTzsW+StK3m6wj4x8Brq+rfAUcCpyU5BHgDcHlVLQMub+MAxwDL2mMl8C4Y\nAhs4HTgCOBw4fXNot3lWjix39DzslyRts3kJ4Kq6par+sQ3fDVwPHAAcC5zXZjsPOK4NHwucX4Mv\nAXsleRjwXGB1VW2qqjuA1cDRbdqDquqLVVXA+SPrkqQd0rz3ASdZCjwR+DKwf1XdAkNIAw9psx0A\nrB9ZbENr21L7hjHt47a/MsmaJGs2bty4vbsjSdtsXgM4yQOAvwFeXVX/sqVZx7TVNrTfu7HqnKpa\nXlXL99tvv62VLElzZt4COMnuDOH7gar6SGu+tXUf0J5va+0bgCUjix8I3LyV9gPHtEvSDmu+zoII\n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\noquhVdWPquofquqiFrg/2vpSQzgDm6Y0H8twnzna83Ej7efX4EvAXkkextAHvbqqNlXVHcBq4Og2\n7UFV9cWqKoYLxx+HJO3gJgrgWbZ/Vd0C0J4f0toPANaPzLehtW2pfcOY9rGSrEyyJsmajRs3bvdO\nSNK26hnA0xnXf1vb0D5WVZ1TVcuravl+++23jSVK0vbrGcC3tu4D2vNtrX0DsGRkvgOBm7fSfuCY\ndknaofUM4EuAzWcyrAAuHmk/sZ0NcSRwV+uiuAw4Ksne7cu3o4DL2rS7kxzZzn44cWRdkrTDmuRq\naNssyQeBZwL7JtnAcDbDW4APJTmF4Zb3x7fZLwWex3CZy3uAlwFU1aYkZwJXtPnOqKrNX+ydynCm\nxf2AT7SHJO3Q5iWAq+qEaSY9e8y8BZw2zXpWMeYWSFW1Bnj89tQoSfNtR/wSTpIWBQNYkjoxgCWp\nEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNY\nkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjox\ngCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWp\nEwNYkjoxgCWpEwNYkjoxgCWpEwNYkjoxgCWpk+4BnOSmJNckuSrJmta2T5LVSda2571be5K8Pcm6\nJFcnedLIela0+dcmWdFrfyRpproHcPOsqjq0qpa38TcAl1fVMuDyNg5wDLCsPVYC74IhsIHTgSOA\nw4HTN4e2JO2odpQAnupY4Lw2fB5w3Ej7+TX4ErBXkocBzwVWV9WmqroDWA0cPd9FS9IkdoQALuBT\nSa5MsrK17V9VtwC054e09gOA9SPLbmht07XfS5KVSdYkWbNx48ZZ3A1JmsxuvQsAnlpVNyd5CLA6\nyde3MG/GtNUW2u/dWHUOcA7A8uXLx84jSfOh+xFwVd3cnm8D/pahD/fW1rVAe76tzb4BWDKy+IHA\nzVtol6QdVtcATrJnkgduHgaOAq4FLgE2n8mwAri4DV8CnNjOhjgSuKt1UVwGHJVk7/bl21GtTZJ2\nWL27IPYH/jbJ5louqKpPJrkC+FCSU4DvAMe3+S8FngesA+4BXgZQVZuSnAlc0eY7o6o2zd9uSNLk\n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\nKCIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bebeac9898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#GenderId\n",
    "cnt_srs = df['gender'].value_counts()\n",
    "plt.figure(figsize=(5,5))\n",
    "sns.barplot(cnt_srs.index,cnt_srs.values,alpha=0.8,color=color[2])\n",
    "plt.xlabel(\"number of occurrences\",fontsize = 12)\n",
    "plt.ylabel(\"gender\",fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如图可知：女性大于男性"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "数据显示的有点密集，大概看一下"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n+/7put7e9uWr7rXtZVMvH2t7oO3fXFj3xq59Z90xg17Pbfue6f36ybbn7cRe235v24/0m98Rf39h\nm5X8bB3juq77mbOKXtv+nWk/t7f9j22fO9V34nfWur0urN9J31lH7bU77Dur7Q907TP0q21/7oh1\nPzv9TN3R9p1tv32qr+q6Pl6vfzz9/Hys7YGF+o66rt2hf2ct7PuMtr8zvXc/1PY5C+vW/Z37iO2f\nML0nDk7vkfO2sr91jrepvw9W1WuP4zvhiO039N5YQt+Pex23+9/7iGOv+zfrqj6fNtDvY/5bwE74\nmT/K8R7z31d2Sq9d5zu07T+druvt0+fX6QvrjvnvvNH3zBb1+j+1/Vy/+fvVi3dwrz/Y9gMLn1sX\nTPV2A7+LdgO/1x5Hn+t+h7Z92bT89bZ7j9hmJdf1aL0urP+5tqPtmdPyTryuNy68V/+47ccWtlnV\ndd3UZ383+D3VDfzesIW9XjfVbu/a98J37eBe2/aatn84vT9es1Bf1fv1aL2+sO0fdO376/q2u1bd\n67Tfv/Q3atvfmv797ujaZ++37YQ+j9Lr29t+pt/8HPjBHdzrRdO//8fa/oe23z/VV/ZztbDvx/yd\n2h34vXW0XhfW7aTvrfWu6Y77zpr2u+G/AVb9s3WUXt/Qb/4d+562T9+pvU71V0//zne2/dWF8Tvt\nPfDcrv33ok/0/2/vzqPlKMs8jn8fEggECElAlrAKGCQ4EMIiIksEN/bBQcGNVRwUcECRRRxENOew\nwxEG4ci+Cch2lEUBnYCybwmGECBAMCGRyKYsgiQ+88f7dG6lb1Xf7tyl3ji/zzn33LpV1dW/+3ZV\nvfVWvV1l9iszG1Z3Vqs4D2wZtrVaZM2u/RLL7XZu1cwOi/dZsF/NNWth2jlm9lbh79rrWNxdP23+\nALsBv4vh1YBxMbw88AwwJv4+FTg2ho8FTilZ1kjg+fg9IoZH9DLfcGAqsFb8vXL8/ggwBRgKDAbu\nAj5UV9aqnDF8GfC1GF4KGJ5pmRqwXAwvCTwIbBV/XwfsE8PnA98oWe4YYDIwBPgg8BwwqJ+yDorl\nrxtlOrmwrtaVdTxwSw/zDAL+DKxd8zrQMivwbeDq4jw5liuwHTAOmNI0vpZyLXzGvwNuA/aKcVsD\n98a0QcD9wPiY9hDwsdj+bgd2KlnmzjHNgK2AB3ubsyprjH+rYv5a1oEW5Tqarv3+KGAOXfvXutbX\n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\nAfwKWD3jrEuR9lVTgMeIzqCZrgP/RdrnPEPqcGuZZO12Hph821plWbNrv8Ryu51bBb5Fqgfmke6M\nc2GuWZumFzsB1VrHuvuCCyciIiIiIiIiIiIiIiIiIiIiIrKYWqLuACIiIiIiIiIiIiIiIiIiIiIi\n0jvqBCQiIiIiIiIiIiIiIiIiIiIisphTJyARERERERERERERERERERERkcWcOgGJiIiIiIiIiIiI\niIiIiIiIiCzm1AlIRERERERERERERERERERERGQxp05AIiIiIiIiIiKLATObYWafrOm9VzGze8zs\nTTM7o44MIiIiIiIiIiLS2uC6A4iIiIiIiIiISPa+DrwCDHN3rzuMiIiIiIiIiIh0pzsBiYiIiIiI\niIj8P2Jmi/KlsLWBqTl2ALJkiZ7GiYiIiIiIiIj8q9PJEBERERERERGRRRSP6DrKzJ4ws7+a2bVm\ntnRM29/M/tA0v5vZ+jF8qZmdZ2a3m9lbZnavma1qZmeb2etmNs3MNm16yy3MbGpMv6TxXrG8Xc1s\nkpm9YWb3mdnGTTmPMbMngLfLOgKZ2dZm9nD8Hw+b2daNnMB+wNGRs9sjycxsBTO73Mz+YmYvmtn3\ni51wzOxgM3sqHic21czGxfg1zezGeN2rZnZujD/RzK4svH6dKLvB8fdEM5tgZvcC7wDrVoxbwcwu\nMrM5ZvaSmf3YzAYVPx8zOz3K8wUz26nwniOjjGfH9JvbLOtj4r3eNLOnzWzH5vISEREREREREekP\n6gQkIiIiIiIiItI7XwA+C3wQ2BjYv8PXfh9YCXgPuB94LP6+Hjizaf4vA58B1gNGx2uJTjUXA/8J\nrAhcAPzSzIYUXvtFYBdguLvPKy7UzEYCtwI/idefCdxqZiu6+/7AVcCp7r6cu99V8n+cA6wArAts\nD+wLHBDL/jxwYowbBuwOvBqdcW4BXgTWAVYHrumxxLp8lfSYsuVjGWXjLgPmAesDmwKfBr5WWMZH\ngadJ5X0qcJGZWUy7AhgKbASsDJwV/09lWZvZBsBhwBbuvjzps5rRwf8kIiIiIiIiIrLI1AlIRERE\nRERERKR3fuLus939NeBXwNgOXnuTuz/q7u8CNwHvuvvl7j4fuJbUcaXoXHefGe81gdSxB+Bg4AJ3\nf9Dd57v7ZaRORVs15Zzp7n8vybEL8Ky7X+Hu89z958A0YLee/oHozLM3cJy7v+nuM4AzSB1yIHW6\nOdXdH/Zkuru/CGwJjAK+6+5vu/u77v6HsveocKm7Pxl5328eB4wEdgKOiOXPJXXk2aewjBfd/WdR\n3pcBqwGrmNlq8dpD3P11d3/f3e+O17Qq6/nAEGCMmS3p7jPc/bkO/icRERERERERkUWmTkAiIiIi\nIiIiIr3z58LwO8ByHbz25cLw30v+bl7WzMLwi6RONABrA9+Jx1O9YWZvAGsWpje/ttkouu6mU1z+\n6q3jA+kuOks1vb742jWBso4wa5I64cwrmdaOsv+nOG5tYElgTqFMLiDd1adhwWfn7u/E4HKR7TV3\nf73kPSrL2t2nA0eQ7nw018yuMbNRJcsQEREREREREelz6gQkIiIiIiIiItI/3iY9TgoAM1u1D5a5\nZmF4LWB2DM8EJrj78MLP0LijT4O3WO5sUueWorWAl9rI9ArwftPri6+dSXp8WbOZwFpmNrhk2kJl\nB5SVXdn/Uxw3k3SHnpUKZTLM3Tcq/ze6ZRtpZsMrplWWtbtf7e7bkMrDgVPaeD8RERERERERkV5T\nJyARERERERERkf4xGdjIzMaa2dKku8P01qFmtoaZjQS+R3pkGMDPgEPM7KOWLGtmu5jZ8m0u9zZg\ntJl9ycwGm9newBjglp5eGI/Sug6YYGbLm9nawLeBK2OWC4GjzGyzyLZ+zPMQMAc4OfIubWYfj9dM\nArYzs7XMbAXguDb/j2KuOcAdwBlmNszMljCz9cxs+zZfeztwnpmNMLMlzWy7mFxZ1ma2gZntYGZD\ngHdJd3Oa32l2EREREREREZFFoU5AIiIiIiIiIiL9wN2fAU4C7gKeBf7QB4u9mtSx5fn4+XG81yPA\nwcC5wOvAdGD/DrK+CuwKfAd4FTga2NXdX2lzEYeT7t7zPOn/vBq4OJb9C2BCjHsTuBkYGZ2HdgPW\nB/4EzAL2jtfcSerg9ATwKG10RqqwL+lRZVNJ5XI9sFqbr/0q6Q5H04C5pMd89VTWQ4CTSXdH+jPp\n0WPfW8TsIiIiIiIiIiIdMfdWd4IWEREREREREREREREREREREZHc6U5AIiIiIiIiIiIiIiIiIiIi\nIiKLOXUCEhERERERERERERERERERERFZzKkTkIiIiIiIiIiIiIiIiIiIiIjIYk6dgERERERERERE\nREREREREREREFnPqBCQiIiIiIiIiIiIiIiIiIiIisphTJyARERERERERERERERERERERkcWcOgGJ\niIiIiIiIiIiIiIiIiIiIiCzm1AlIRERERERERERERERERERERGQxp05AIiIiIiIiIiIiIiIiIiIi\nIiKLuf8DMHQmssj6zXsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bebed245f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#TimezoneInt\n",
    "cnt_srs = df['timezone'].value_counts()\n",
    "plt.figure(figsize=(40,5))\n",
    "sns.barplot(cnt_srs.index,cnt_srs.values,alpha=0.8,color=color[2])\n",
    "plt.xlabel(\"number of occurrences\",fontsize = 12)\n",
    "plt.ylabel(\"timezone\",fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有图可见，位于420时区的最多"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3、特征处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>locale</th>\n",
       "      <th>birthyear</th>\n",
       "      <th>gender</th>\n",
       "      <th>joinedAt</th>\n",
       "      <th>timezone</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>id_ID</td>\n",
       "      <td>1993</td>\n",
       "      <td>male</td>\n",
       "      <td>2012-10-02T06:40:55.524Z</td>\n",
       "      <td>480.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>id_ID</td>\n",
       "      <td>1992</td>\n",
       "      <td>male</td>\n",
       "      <td>2012-09-29T18:03:12.111Z</td>\n",
       "      <td>420.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>en_US</td>\n",
       "      <td>1975</td>\n",
       "      <td>male</td>\n",
       "      <td>2012-10-06T03:14:07.149Z</td>\n",
       "      <td>-240.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>en_US</td>\n",
       "      <td>1991</td>\n",
       "      <td>female</td>\n",
       "      <td>2012-11-04T08:59:43.783Z</td>\n",
       "      <td>210.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>id_ID</td>\n",
       "      <td>1995</td>\n",
       "      <td>female</td>\n",
       "      <td>2012-09-10T16:06:53.132Z</td>\n",
       "      <td>420.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  locale birthyear  gender                  joinedAt  timezone\n",
       "0  id_ID      1993    male  2012-10-02T06:40:55.524Z     480.0\n",
       "1  id_ID      1992    male  2012-09-29T18:03:12.111Z     420.0\n",
       "2  en_US      1975    male  2012-10-06T03:14:07.149Z    -240.0\n",
       "3  en_US      1991  female  2012-11-04T08:59:43.783Z     210.0\n",
       "4  id_ID      1995  female  2012-09-10T16:06:53.132Z     420.0"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y= df['user_id']\n",
    "#user_id不作为聚类属性\n",
    "df = df.drop([\"user_id\"], axis=1)\n",
    "        \n",
    "#location有缺失值，粗暴抛弃\n",
    "#也可以将缺失值作为另外一类：others\n",
    "df = df.drop([\"location\"], axis=1)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#特征编码\n",
    "import datetime\n",
    "import hashlib\n",
    "import locale\n",
    "\n",
    "from collections import defaultdict\n",
    "from sklearn.preprocessing import normalize\n",
    "\n",
    "class FeatureEng:\n",
    "    def __init__(self):\n",
    "         # 载入 locales\n",
    "        self.localeIdMap = defaultdict(int)\n",
    "        for i, l in enumerate(locale.locale_alias.keys()):\n",
    "          self.localeIdMap[l] = i + 1\n",
    "        \n",
    "        # 载入 gender id 字典\n",
    "        ##缺失补0\n",
    "        self.genderIdMap = defaultdict(int, {'NaN': 0, \"male\":1, \"female\":2})\n",
    "\n",
    "  \n",
    "    def getLocaleId(self, locstr):\n",
    "        return self.localeIdMap[locstr.lower()]\n",
    "\n",
    "    def getGenderId(self, genderStr):\n",
    "        return self.genderIdMap[genderStr]\n",
    "\n",
    "    def getJoinedYearMonth(self, dateString):\n",
    "        try:\n",
    "            dttm = datetime.datetime.strptime(dateString, \"%Y-%m-%dT%H:%M:%S.%fZ\")\n",
    "            #return \"\".join([str(dttm.year), str(dttm.month)])\n",
    "            return (dttm.year-2010)*12 + dttm.month\n",
    "        except:  #缺失补0\n",
    "          return 0\n",
    "\n",
    "    def getBirthYearInt(self, birthYear):\n",
    "        #缺失补0\n",
    "        try:\n",
    "          return 0 if birthYear == \"None\" else int(birthYear)\n",
    "        except:\n",
    "          return 0\n",
    "\n",
    "    def getTimezoneInt(self, timezone):\n",
    "        try:\n",
    "          return int(timezone)\n",
    "        except:  #缺失值处理\n",
    "          return 0"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "从数据信息可以看出来，数据不是很全，需要进行数据处理。\n",
    "gender  性别  (对其进行处理，male=1，female=2，NaN=0）\n",
    "joinedAt  用户加入时间  (缺失值补0)\n",
    "location    地点 (缺失值最多，drop掉)\n",
    "timezone    时区 (缺失值补0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "FE = FeatureEng()\n",
    "\n",
    "cols = ['LocaleId', 'BirthYearInt', 'GenderId', 'JoinedYearMonth', 'TimezoneInt']\n",
    "n_cols = len(cols)\n",
    "userMatrix = np.zeros((df.shape[0],n_cols), dtype=np.int)\n",
    "\n",
    "for i in range(df.shape[0]): \n",
    "    userMatrix[i, 0] = FE.getLocaleId(df.loc[i,'locale'])\n",
    "    userMatrix[i, 1] = FE.getBirthYearInt(df.loc[i,'birthyear'])\n",
    "    userMatrix[i, 2] = FE.getGenderId(df.loc[i,'gender'])\n",
    "    userMatrix[i, 3] = FE.getJoinedYearMonth(df.loc[i,'joinedAt'])\n",
    "    #userMatrix[i, 4] = FE.getCountryId(df[''])\n",
    "    userMatrix[i, 4] = FE.getTimezoneInt(df.loc[i,'timezone'])\n",
    "\n",
    "# 归一化用户矩阵\n",
    "userMatrix = normalize(userMatrix, norm=\"l1\", axis=0, copy=False)\n",
    "\n",
    "df_FE = pd.DataFrame(data=userMatrix, columns=cols)  \n",
    "#mmwrite(\"US_userMatrix\", userMatrix)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>LocaleId</th>\n",
       "      <th>BirthYearInt</th>\n",
       "      <th>GenderId</th>\n",
       "      <th>JoinedYearMonth</th>\n",
       "      <th>TimezoneInt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   LocaleId  BirthYearInt  GenderId  JoinedYearMonth  TimezoneInt\n",
       "0  0.000036      0.000027  0.000019         0.000026     0.000036\n",
       "1  0.000036      0.000027  0.000019         0.000026     0.000031\n",
       "2  0.000020      0.000027  0.000019         0.000026    -0.000018\n",
       "3  0.000020      0.000027  0.000038         0.000027     0.000016\n",
       "4  0.000036      0.000027  0.000038         0.000026     0.000031"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_FE.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 38209 entries, 0 to 38208\n",
      "Data columns (total 5 columns):\n",
      "LocaleId           38209 non-null float64\n",
      "BirthYearInt       38209 non-null float64\n",
      "GenderId           38209 non-null float64\n",
      "JoinedYearMonth    38209 non-null float64\n",
      "TimezoneInt        38209 non-null float64\n",
      "dtypes: float64(5)\n",
      "memory usage: 1.5 MB\n"
     ]
    }
   ],
   "source": [
    "df_FE.info()"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "已对缺失值进行了处理。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(38209, 5)\n"
     ]
    }
   ],
   "source": [
    "print(df_FE.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 三、聚类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.cluster import MiniBatchKMeans\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn import metrics\n",
    "from sklearn.decomposition import PCA\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# 将训练集合拆分成训练集和校验集，在校验集上找到最佳的模型超参数\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(df_FE,y, train_size = 0.5,random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(19104, 5)\n",
      "(19105, 5)\n"
     ]
    }
   ],
   "source": [
    "#拆分后的训练集和校验集的样本数目\n",
    "print(X_train_part.shape)\n",
    "print(X_val.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 一个参数点（聚类数据为K）的模型，在校验集上评价聚类算法性能\n",
    "def K_cluster_analysis(K, X_train, y_train, X_val, y_val):\n",
    "    start = time.time()\n",
    "    \n",
    "    print(\"K-means begin with clusters: {}\".format(K));\n",
    "    \n",
    "    #K-means,在训练集上训练\n",
    "    mb_kmeans = MiniBatchKMeans(n_clusters = K)\n",
    "    mb_kmeans.fit(X_train)\n",
    "    \n",
    "    # 在训练集和测试集上测试\n",
    "    #y_train_pred = mb_kmeans.fit_predict(X_train)\n",
    "    y_val_pred = mb_kmeans.predict(X_val)\n",
    "    \n",
    "    #以前两维特征打印训练数据的分类结果\n",
    "    #plt.scatter(X_train[:, 0], X_train[:, 1], c=y_pred)\n",
    "    #plt.show()\n",
    "\n",
    "    # K值的评估标准\n",
    "    #常见的方法有轮廓系数Silhouette Coefficient和Calinski-Harabasz Index\n",
    "    #这两个分数值越大则聚类效果越好\n",
    "    #CH_score = metrics.calinski_harabaz_score(X_train,mb_kmeans.predict(X_train))\n",
    "    CH_score = metrics.silhouette_score(X_train,mb_kmeans.predict(X_train))\n",
    "    \n",
    "    #也可以在校验集上评估K\n",
    "    v_score = metrics.v_measure_score(y_val, y_val_pred)\n",
    "    \n",
    "    end = time.time()\n",
    "    print(\"CH_score: {}, time elaps:{}\".format(CH_score, int(end-start)))\n",
    "    print(\"v_score: {}\".format(v_score))\n",
    "    \n",
    "    return CH_score,v_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K-means begin with clusters: 20\n",
      "CH_score: 0.6893073498572493, time elaps:22\n",
      "v_score: 0.419547928508833\n",
      "K-means begin with clusters: 40\n",
      "CH_score: 0.6849414036780224, time elaps:19\n",
      "v_score: 0.46991505500172115\n",
      "K-means begin with clusters: 80\n",
      "CH_score: 0.5752024610901096, time elaps:18\n",
      "v_score: 0.5498716660128977\n"
     ]
    }
   ],
   "source": [
    "# 设置超参数（聚类数目K）搜索范围\n",
    "Ks = [20,40,80]\n",
    "CH_scores = []\n",
    "v_scores = []\n",
    "for K in Ks:\n",
    "    ch,v = K_cluster_analysis(K, X_train_part, y_train_part, X_val, y_val)\n",
    "    CH_scores.append(ch)\n",
    "    v_scores.append(v)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bebf73ea58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制不同维数下模型的性能，找到最佳模型／参数（分数最高）\n",
    "plt.plot(Ks, np.array(CH_scores), 'b-')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nnv4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bebf74e6d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(Ks, np.array(v_scores), 'g-')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MiniBatchKMeans(batch_size=100, compute_labels=True, init='k-means++',\n",
       "        init_size=None, max_iter=100, max_no_improvement=10, n_clusters=20,\n",
       "        n_init=3, random_state=None, reassignment_ratio=0.01, tol=0.0,\n",
       "        verbose=0)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_clusters = 20\n",
    "km1 = MiniBatchKMeans(n_clusters = n_clusters)\n",
    "km1.fit(df_FE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df_FE['cluster_20'] = km1.predict(df_FE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MiniBatchKMeans(batch_size=100, compute_labels=True, init='k-means++',\n",
       "        init_size=None, max_iter=100, max_no_improvement=10, n_clusters=40,\n",
       "        n_init=3, random_state=None, reassignment_ratio=0.01, tol=0.0,\n",
       "        verbose=0)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_clusters = 40\n",
    "km2 = MiniBatchKMeans(n_clusters = n_clusters)\n",
    "km2.fit(df_FE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df_FE['cluster_40'] = km2.predict(df_FE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MiniBatchKMeans(batch_size=100, compute_labels=True, init='k-means++',\n",
       "        init_size=None, max_iter=100, max_no_improvement=10, n_clusters=80,\n",
       "        n_init=3, random_state=None, reassignment_ratio=0.01, tol=0.0,\n",
       "        verbose=0)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_clusters = 80\n",
    "km3 = MiniBatchKMeans(n_clusters = n_clusters)\n",
    "km3.fit(df_FE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#保存预测结果\n",
    "df_FE['cluster_80'] = km3.predict(df_FE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df_FE.to_csv('users_FE.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>LocaleId</th>\n",
       "      <th>BirthYearInt</th>\n",
       "      <th>GenderId</th>\n",
       "      <th>JoinedYearMonth</th>\n",
       "      <th>TimezoneInt</th>\n",
       "      <th>cluster_20</th>\n",
       "      <th>cluster_40</th>\n",
       "      <th>cluster_80</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000036</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>62</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>-0.000018</td>\n",
       "      <td>10</td>\n",
       "      <td>21</td>\n",
       "      <td>77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000020</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000016</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000038</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000031</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   LocaleId  BirthYearInt  GenderId  JoinedYearMonth  TimezoneInt  cluster_20  \\\n",
       "0  0.000036      0.000027  0.000019         0.000026     0.000036           1   \n",
       "1  0.000036      0.000027  0.000019         0.000026     0.000031           1   \n",
       "2  0.000020      0.000027  0.000019         0.000026    -0.000018          10   \n",
       "3  0.000020      0.000027  0.000038         0.000027     0.000016           2   \n",
       "4  0.000036      0.000027  0.000038         0.000026     0.000031           4   \n",
       "\n",
       "   cluster_40  cluster_80  \n",
       "0           6          62  \n",
       "1           6           2  \n",
       "2          21          77  \n",
       "3           0          48  \n",
       "4           7          50  "
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_FE.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
